Şöyle Şöyle Bu makale yalnızca eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptığınız şeylerden sorumlu olduğunuzu unutmayın. Bu makale yalnızca eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptığınız şeylerden sorumlu olduğunuzu unutmayın. Kimsenin Konuşmadığı Sorun Dijital Uyku Paradoksu Ekranların uyku rutinlerini domine ettiği bir çağda, milyonlarca insan şimdi YouTube videolarına, podcastlara veya akış uygulamalarına uykuya dalıyor. Bununla birlikte, bu alışkanlığın gizli bir maliyeti vardır: özellikle çocuklar için kontrolsüz ses maruz kalması. bir ebeveyn ve geliştiricisi olarak, bu sorunu ilk elden karşı karşıya kaldım - çocuğumun gece geç saatlerinde YouTube binges huzursuz uyku ve sabah sinirlenmesine neden oldu. Google Play Store'daki ücretsiz uygulamalar, örneğin ve Belki ticari uygulamalar daha iyi olurdu, ama bunu test etmedim çünkü para maliyeti vardı, genellikle biraz. Volüm Sınırlaması Volume Kontrolü The Hack (Totally Illegal...ish) Hakkında Android cihazınıza kablosuz bir şekilde bağlanır ve sesini izler bir senkron oluşturdum. Eğer çok gürültülü olursa - onu hafifçe düşürür. hiçbir durdurma videoları, hiçbir ekran patlaması, hiçbir kullanıcı etkileşimi. Sadece sessiz sihir. Evet, teknik olarak, bir geliştirici aracı olan Wi-Fi üzerinde ADB (Android Debug Bridge) kullanır ve yatmadan önce ebeveynlik için tasarlanmamıştır. Gelişim ortamınızı oluşturun Bir geliştirme ortamı ve bağlantı kurmak, kodun içine dalmadan önce çok önemlidir.Bu, geliştirme sürecini kolaylaştırmak için gerekli tüm araçlara ve kitaplıklara sahip olmanızı sağlayacaktır. macOS kullanıyorum, bu yüzden hikayedeki tüm örnekler bu sistemle olacak, ancak Windows kullanımı, süreci macOS'a kıyasla çok daha zorlaştırmaz. tek fark, macOS işletim sisteminde Python'un zaten yüklendiği ve Windows'ta Python'u buradan kendiniz yüklemeniz gerektiğidir: Windows Python Hakkında İşte daha ayrıntılı bir bölünme: Şöyle Şöyle Şöyle Şöyle Şöyle Download and Extract Platform Tools: Go to the official Android Developers website: Navigate to Android SDK Platform-Tools. Download the SDK Platform Tools: Download the latest version for your operating system (Windows, macOS, or Linux). Extract the ZIP file: Extract the downloaded ZIP file to a location of your choice (e.g., C:\adb on Windows). Platform Aracıları Sisteminizin YOLU: Windows: “Environment Variables” ayarlarını açın (Başlangıç menüsünde “Environment Variables” için arama). “Environment Variables” bölümüne tıklayın. “System variables” bölümüne “Environment Variables” bölümüne tıklayın, “Path” değişkenini bulun, seçin ve “Edit” tıklayın. Örneğin: “PATH=$PATH:/path to/platform-tools export”. macOS/Linux: Terminalinizi açın. Platform-tools dosyasına yol ekleyin (örneğin, ~/.bashrc, ~/.zshrc). Örneğin: export PATH=$PATH:/path/to/platform-tools export. PATH=PATH:/us ADB Kurulumunu doğrulayın: Bir komut satır arayüzü (CLI) açın: Windows Arama Çubuğu (Windows OS) kullanılarak: Başlat düğmesine veya görev çubuğundaki büyüleyici cam simgesine tıklayın. Arama çubuğunda "cmd" yazın. "Command Prompt" sonuçuna tıklayın. Yönetici olarak çalıştırmak için arama sonuçlarında "Command Prompt" üzerine sağ tıklayın ve "Administrator olarak çalıştır" seçin. Spotlight Search (macOS) kullanılarak: Menü çubuğundaki büyüleyici cam simgesine tıklayın (veya Cmd+Space'ye tıklayın). "Terminal" yazın ve açmak için iki tıklayın. Adb türü ve Enter tuşuna basın. adb Adb doğru şekilde yüklendiğinde ADB yardımı Android Cihazınızda USB Debugging'i etkinleştirin: Android Cihazınızda "Ayarlar" sayfasına gidin. Aşağı kaydırın ve "Telefon Hakkında" seçeneğini seçin. "Build Number"'i bulun ve Geliştirici Seçenekleri'nin kilidini açmak için 7 veya daha fazla kez dokunun. Ana "Ayarlar" sayfasına dönün ve şimdi "Geliştirici Seçenekleri"yi göreceksiniz. "Geliştirici Seçenekleri"yi seçin. "USB Debugging"'a kaydırın ve açın. Bundan sonra, sadece komut satırında çalışacağız. Benim durumumda, bu terminal olacak. Bağlantınızı kurmak Bir sonraki adım mobil cihazınızı PC'nize bağlamak olacaktır.Bu iki parçadan oluşan nispeten basit bir adımdır: Şöyle Şöyle Şöyle kablo bağlantıları; Wireless bağlantı Wire Bağlantısı : Mobil cihazınızı bilgisayarınıza kablo (USB A/USB C veya USB A/micro USB, vb.) kullanarak bağlamanız gerekir. Ardından, terminali açın ve aşağıdaki komutu yazın: adb devices For now, we are ready to enable TCP/IP mode with the following command: adb tcpip 5555 Eğer zaten terminaldeysek, Wi-Fi ağındaki mobil cihazın IP adresini, mobil cihazı izlemeden kontrol edebiliriz.Daha sonra kablosuz bir bağlantı kurarken ihtiyacımız olan IP adresini bulmak için aşağıdaki komutu çalıştıralım: adb -d shell "ip route | awk '/wlan0/ {print \$9}'" Kablosuz Bağlantı : Cihazınızın IP adresine sahip olduğunuzda, kablosuz olarak bağlanma zamanı geldi. Artık kablolu bir bağlantıya ihtiyacınız yok. , USB kablosunu güvenli bir şekilde çıkarabilirsiniz.Bütün büyünün geri kalanı Wi-Fi üzerinden olacaktır. adb tcpip 5555 Akıllı telefonunuzun ve bilgisayarınızın aynı Wi-Fi ağında olduğundan emin olun. adb connect <DEVICE_IP>:5555 Örneğin, cihazınızın IP Giriş yapacaksınız : 10.0.0.108 adb connect 10.0.0.108:5555 Her şey yolunda giderse, şöyle bir mesaj göreceksiniz: Let’s Talk About the Problem Again Bir adım geri dönelim ve çözdüklerimizi hatırlayalım. Çocuğunuz sessiz bir video izlerken huzurlu bir şekilde uykuya dalar - belki bir yatak hikayesi veya biraz rahatlatıcı sesler. Ama iki saat sonra? YouTube'un otomatik oynaması girer, sesli bir reklam dalgası, ya da yüksek enerjili bir çizgi roman sesi onları uyandırır. Onlar groggy. Sen groggy. Herkes günlerini zaten bozulmuş başlar. Neye ihtiyacımız vardı sessiz bir koruyucusu - görünmez ve güvenilir bir şey. Bir bakışta mimarlık İşte her şeyin nasıl bağlantılı olduğunu gösteren hızlı bir diagram: Şöyle Şöyle Bilgisayarınız (Python senaryosunu çalıştırıyor) Wi-Fi üzerinden ADB aracılığıyla Android cihazına bağlanır, ses miktarını düzenli olarak izler ve gerektiğinde azaltır. Bilgisayarınız (Python senaryosunu çalıştırıyor) Wi-Fi üzerinden ADB aracılığıyla Android cihazına bağlanır, ses miktarını düzenli olarak izler ve gerektiğinde azaltır. Sihirbazlık yapan yazar Çözümün temeli, Android cihazınızla Wi-Fi üzerinden ADB aracılığıyla iletişim kuran bir Python senaryosudur. Her 30 saniyede, şu anki müzik akışı hacmi kontrol eder. eğer hacim 5'in üzerinde ise (Android genellikle 15 noktalı bir ölçekte kullanır), senaryo onu hafifçe düşürür - bir kerede bir adım, kısa kesintilerle. eğer hacim zaten 5 veya daha düşükse, sadece bekler - hacim tekrar yükselirse sessizce bekler. En iyi kısmı? Manuel değişikliklere saygı gösterir. Birisi ses seviyesini kendisi düşürürse, senaryo fark eder ve rahatsız etmez. Sessizdir. Adaptatiftir. Görünmezdir – iyi bir yatıştırma asistanının olması gibi. The Script’s Evolution: Tiny Hack’den Güvenilir Araç’a Bu senaryoyu ilk yazdığımda sadece birkaç satır uzunluğundaydım. Böyle bir şey görünüyordu: import subprocess import time import re def get_stream_volume(): cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'" result = subprocess.run(cmd, shell=True, capture_output=True, text=True) match = re.search(r'streamVolume:(\d+)', result.stdout) return int(match.group(1)) if match else None def set_volume(level): cmd = f"adb shell cmd media_session volume --stream 3 --set {level}" subprocess.run(cmd, shell=True) print(f"Volume set to {level}") def monitor_volume(): while True: volume = get_stream_volume() if volume is None: print("Failed to get volume level. Retrying...") time.sleep(5) continue print(f"Current volume: {volume}") if volume == 15: for vol in range(14, 4, -1): set_volume(vol) time.sleep(30) while get_stream_volume() == 5: print("Volume is at 5, monitoring every 60 seconds...") time.sleep(60) if __name__ == "__main__": monitor_volume() os.system("adb shell dumpsys audio | grep -i 'streamVolume'") Ne olursa olsun, cihaz gece ortasında bağlanmazsa ne olursa olsun? ADB bir zaman geçirmezse ne olursa olsun? telefon çiftleştirilmezse ne olursa olsun? senaryo herkes uyurken çökerse ne olur? Ama senaryo gelişti. Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Bazen, aygıt bağlanmadı, bu yüzden adb connect ip:port ekledim. Bazen ADB gece yarısı çöktü. istisnalar ve geri dönüşler ekledim. Evet evet, bunu da ekledim. Dosya kayıtları ve konsol kayıtları? Şimdi, senaryo da bunu izliyor - ve sadece gerektiğinde müdahale ediyor. Yüksek vs. düşük voltaj seviyeleri için farklı aralıklar. Ve evet, şık kapatma Ctrl + C. Birkaç satır senaryo olarak başlayan şey, telefonunuzu gözetleyen küçük bir bekçi haline geldi - bu yüzden yapmanıza gerek yok. import subprocess import time import re import logging from datetime import datetime logging.basicConfig( filename='volume_control.log', level=logging.INFO, format='[%(asctime)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) ADB_DEVICE = "10.0.0.108:5555" def log(message): timestamp = get_timestamp() print(f'[{timestamp}] {message}') logging.info(message) def get_timestamp(): return datetime.now().strftime('%Y-%m-%d %H:%M:%S') def connect_adb(): subprocess.run(f"adb connect {ADB_DEVICE}", shell=True) log(f"Reconnected to ADB at {ADB_DEVICE}") def get_stream_volume(): cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'" result = subprocess.run(cmd, shell=True, capture_output=True, text=True) match = re.search(r'streamVolume:(\d+)', result.stdout) return int(match.group(1)) if match else None def safe_get_stream_volume(retries=3, delay=5): for attempt in range(retries): volume = get_stream_volume() if volume is not None: return volume log(f"Attempt {attempt + 1}: Failed to get volume. Retrying after reconnect...") connect_adb() time.sleep(delay) log("All attempts failed. Giving up temporarily.") return None def set_volume(level): cmd = f"adb shell cmd media_session volume --stream 3 --set {level}" subprocess.run(cmd, shell=True) log(f"Volume set to {level}, waiting 30 seconds...") def monitor_volume(): while True: volume = safe_get_stream_volume() if volume is None: log("Initial volume read failed. Retrying in 30 seconds...") time.sleep(30) continue log(f"Current volume: {volume}") while volume > 5: set_volume(volume - 1) time.sleep(30) volume = safe_get_stream_volume() if volume is None: log("Failed to read volume during decreasing.") break while True: volume = safe_get_stream_volume() if volume is None: log("Failed to read volume during monitoring.") time.sleep(30) break if volume > 5: log(f"Volume increased to {volume}, restarting decreasing") break log(f"Volume is at {volume}, monitoring every 60 seconds...") time.sleep(60) if __name__ == "__main__": try: monitor_volume() except KeyboardInterrupt: log("Script stopped by user (Ctrl+C)") except Exception as e: log(f"Unexpected error: {e}") finally: log("Script exited.") Bugün, senkron üretim düzeyinde ve açık kaynaklıdır. ancak bu satırı değiştirmek için ADB_DEVICE = "10.0.0.108:5555" senkronun IP adresinizle ve . “İletişiminizi kurmak” Senaryo çalıştırmak: Cron gibi iki kolay seçenek Senaryoyu çalıştırmak için iki ana yolu vardır: Şöyle Şöyle Python ile doğrudan Python 3 yüklü ise, sadece çalıştırabilirsiniz: python3 reduce_volume.py Hemen başlayacak ve işini arka planda sessizce yapacaktır. Şöyle Şöyle Standalone Executable olarak Python yüklü olmayan biriyle paylaşmak ister misiniz? Senaryoyu bir standalone'a dönüştürebilirsiniz macOS veya Windows kullanırken, : Hakkında .app .exe Piyasalar pyinstaller --onefile reduce_volume.py Bu, bir çift tıklama ile başlatılabilecek taşınabilir bir uygulama oluşturacaktır - Python gerekmez. Şöyle Şöyle Hatta fancy iseniz bir cron iş veya görev programlayıcısı ile planlayın. Bir şey daha: Uzaktan ADB Sınırlamaları Wi-Fi üzerinden ADB'nin kırılgan olabileceğine dikkat etmek önemlidir. Uzaktan bağlantınız kesilirse: Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Telefonu yeniden başlatıyor. Wi-Fi ağı değişiyor Geliştirici Modu veya USB Debugging devre dışı bırakılır. Cihaz ADB aktivitesi olmadan çok uzun süre çalışır (bazı sistemler otomatik olarak aktif olmayan bağlantıları başlatır). Ve diğer birçok... Eğer senaryo çalışmıyorsa, sadece adımları tekrarlayın. : Hakkında “İletişiminizi kurmak” Şöyle Şöyle Şöyle Şöyle Mobil cihazı kablo ile kişisel bilgisayarınıza bağlayın. Adb tcpip 5555 Adb tcpip 5555 Adb tcpip 5555 Adb tcpip 5555 Adb Connect <DEVICE_IP> 5555 indir adb connect 10.0.0.108:5555 İşe geri döneceksin. Son Düşünceler Bu hack, çocuğunuzun eğlencesini sessizleştirmekle ilgili değildir. uykularını - ve aklınızı - beklenmedik teknoloji sürprizlerinden korumakla ilgilidir. Bu küçük bir senaryo olabilir, ancak ailem ve benim için, hayatımı değiştiren bir şeydi. Artık 2 AM YouTube uyanıklığı yok. Artık korkunç sabahlar yok. Sadece huzurlu geceler ve ince bir parental otomasyon. Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Şöyle Bu biraz hacker mıdır? Güvenilir bir şekilde çalışıyor mu? Teknik olarak evet, ancak gri bir bölgede çalışır (ADB erişimi ve otomatik kontrol, Google tarafından nihai kullanıcılar için resmi olarak desteklenmez). Yorgun bir ebeveynin (veya kendisinin) daha iyi uyumasına yardımcı olduğu sürece - buna değer. Bu çok subtil. Görünmez bir şey. Ve işe yarıyor. Kaynak kodu, tek tıklama kurulum veya geliştirilmiş bir sürüm istiyorsanız bana bildirin. Ve hey - iyi uyumak. sen bunu kazandın. Şöyle Şöyle P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir zamanlama ayarlamak, farklı profillere uyum sağlamak, cihaz aktivitesini izlemek, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, belirli bir isteğiniz veya fikriniz varsa, size yardımcı olmaktan mutluluk duyuyorum ve aynı zamanda bu başka bir makale için bir konu olacak. P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir zamanlama ayarlamak, farklı profillere uyum sağlamak, cihaz aktivitesini izlemek, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, belirli bir isteğiniz veya fikriniz varsa, size yardımcı olmaktan mutluluk duyuyorum ve aynı zamanda bu başka bir makale için bir konu olacak.